package com.sigmatrix.h5.service;

import java.util.List;

import com.microsoft.windowsazure.exception.ServiceException;
import com.sigmatrix.h5.entity.DisDealer;
import com.sigmatrix.h5.entity.DisDealerAcctRegAudit;
import com.sigmatrix.h5.utils.baidu.po.LatLngLocation;
import com.sigmatrix.h5.web.args.DealerRegParam;
import com.sigmatrix.sc.jdbc.common.service.Service;

/**
 * 
 *@ClassName: DistributionDealersService
 *@Description: 经销商表
 *@author MH
 *@date 2017年9月27日 上午11:00:32
 */
public interface DisDealerService extends Service<DisDealer, Integer>{
	
	/**
	 * 
	 *@Title: findFirstLevelParent
	 *@Description: 查询父级一级经销商
	 *@return DistributionDealers
	 *@author MH
	 *@date 2017年9月27日 下午12:48:12
	 *@param id
	 *@return
	 */
	DisDealer findFirstLevelParent(Integer id);
	
	/**
	 * 查询所有的父级经销商，包括自己
	 *@Title: findParents
	 *@Description: 
	 *@return List<DistributionDealers>
	 *@author MH
	 *@date 2017年9月29日 下午2:30:47
	 *@param id
	 *@return
	 */
	List<DisDealer> findParents(Integer id);
	List<DisDealer> findParents(String dealerCode);
	/**
	 * 通过推广码查询父级经销商
	 *@Title: findParentsByPromotionCode
	 *@Description: 
	 *@return List<DistributionDealers>
	 *@author MH
	 *@date 2017年8月14日 下午11:12:40
	 *@param promotionCode
	 *@return
	 *@throws ServiceException
	 */
	List<DisDealer> findParentsByPromotionCode(String promotionCode);
	/**
	 * 
	 *@Title: findByIds
	 *@Description: 
	 *@return List<DistributionDealers>
	 *@author MH
	 *@date 2017年10月9日 下午5:45:18
	 *@param ids
	 *@return
	 */
	List<DisDealer> findByIds(Object ... ids);
	
	/**
	 * 
	 *@Title: saveTempRecord
	 *@Description: 保存一条临时记录，状态为禁用，等审核通过的时候再改为启用
	 *@return Integer
	 *@author MH
	 *@date 2017年11月8日 下午12:53:17
	 *@param registInfo
	 *@return
	 */
	Integer saveTempRecord(DealerRegParam registInfo);

	/**
	 * 
	 *@Title: validateOpenId
	 *@Description: 校验openId是否绑定过经销商
	 *@return boolean
	 *@author MH
	 *@date 2017年11月10日 下午4:09:51
	 *@param openId
	 *@return
	 */
	boolean validateOpenId(String openId);
	
	/**
	 * 
	 *@Title: synDealer
	 *@Description: 跟平台同步经销商
	 *@return DistributionDealer
	 *@author MH
	 *@date 2017年11月10日 下午7:30:52
	 *@param audit
	 * @param dealer 
	 *@return
	 */
	DisDealer synDealer(DisDealerAcctRegAudit audit, DisDealer dealer);
	
	/**
	 * 
	 *@Title: findChildren
	 *@Description: 查询下级经销商
	 *@return List<DistributionDealers>
	 *@author MH
	 *@date 2017年12月5日 下午3:44:33
	 *@param id
	 *@return
	 */
	List<DisDealer> findChildren(Integer id);
	
	/**
	 * 
	 *@Title: getDealerInfo
	 *@Description:获取经销商信息
	 *@return DisDealer
	 *@author MH
	 *@date 2018年1月16日 下午4:10:09
	 *@param dealerId
	 *@return
	 */
	DisDealer getDealerInfo(Integer dealerId);
	
	/**
	 * 
	 *@Title: checkFleeing
	 *@Description:验证是否窜货
	 *@return boolean
	 *@author MH
	 *@date 2018年1月16日 下午6:14:33
	 *@param dealerId
	 *@param lat
	 *@param lng
	 *@return
	 */
	boolean checkFleeing(Integer dealerId, String lat, String lng);

	boolean checkFleeing(Integer dealerId, LatLngLocation location);
	/**
	 * 根据经销商推广码查询推广码关联的经销商id
	 * 
	 * @param promotionCode
	 * 
	 * @return
	 */
	DisDealer findByPromotionCode(String promotionCode);
}
